﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace WindowsaGame1
{
    class Level1 : SceneBase
    {


        Personagem personagem;
        public Objeto2D space;


        static public List<Meteoro> listaMeteoro;
        int contador = 0;

        //public bool marcarPonto;
        
        Objeto2D barraEnergia; 

        KeyboardState teclado;
        //KeyboardState tecladoAntigo;

        public bool possivelColisao;
        public bool houveColisao;
        public bool gameOver;
        public bool haVida;

        //public static int i;
        //public static int j;

        public override void start()
        {
             //nosso novo LoadContent

            TiroManager.Initialize(Game1.Self.Content.Load<Texture2D>("laser"));

            personagem = new Personagem(Game1.Self.Content.Load<Texture2D>("spaceship"), 130, 90);
            personagem.posicao = new Vector2(200, 200);


            space = new Objeto2D(Game1.Self.Content.Load<Texture2D>("space"));

            
            listaMeteoro = new List<Meteoro>();

            possivelColisao = true;
            houveColisao = false;
            haVida = true;

            gameOver = false;         

        
            

            barraEnergia = new Objeto2D(Game1.Self.Content.Load<Texture2D>("barraenergia"));
            barraEnergia.posicao = Vector2.Zero;
            barraEnergia.vetorOrigem = Vector2.Zero;

            Meteoro meteoroDaPaixao = new Meteoro(Game1.Self.Content.Load<Texture2D>("meteoro"), new Vector2(Game1.Self.Window.ClientBounds.Width, Game1.Self.Window.ClientBounds.Height));
            //    tempo =gameTime.TotalGameTime.sdsfksdaf;
            meteoroDaPaixao.posicao.X = 400;
            meteoroDaPaixao.posicao.Y = 200;
            listaMeteoro.Add(meteoroDaPaixao);

            
            //SoundManager.AddMusic("musicaDanzai", Content.Load<Song>("danzai"));
            //SoundManager.PlayMusic("musicaDanzai");

            Scoring.Initialize();
        }

        public override void update(GameTime gameTime)
        {


            teclado = Keyboard.GetState();
            //mouse = Mouse.GetState();

            //if(tempo+109231829340124 > gameTime.TotalGameTime.){

            if (gameOver == false)
            {

                if (contador > 29)
                {
                    listaMeteoro.Add(new Meteoro(Game1.Self.Content.Load<Texture2D>("meteoro"), new Vector2(Game1.Self.Window.ClientBounds.Width, Game1.Self.Window.ClientBounds.Height)));
                    contador = 0;
                }
                else
                {
                    contador++;
                }

                if (teclado.IsKeyDown(Keys.P))
                { SoundManager.PauseMusic("musicaDanzai"); }

                if (teclado.IsKeyDown(Keys.O))
                { SoundManager.ResumeMusic("musicaDanzai"); }

                personagem.Update(gameTime);
                TiroManager.Update();

                if (teclado.IsKeyDown(Keys.Space))
                {

                    Console.WriteLine("Sai do level 1");
                    SceneManager.setScene(new Menu());
                }

                personagem.Update(gameTime);
                TiroManager.Update();

                if (possivelColisao == true)
                {


                }
                
                if (listaMeteoro != null)  //não existindo meteoros nada sera feito com os meteoros.
                {
                    for (int i = 0; i < listaMeteoro.Count; i++)  //cheque todos os meteoros
                    {
                        listaMeteoro[i].Update();
                        if (listaMeteoro[i].posicao.X < -30)
                        {
                            listaMeteoro.RemoveAt(i);
                        }
                        if (TiroManager.listaTiro != null)
                        {

                            if (possivelColisao == true)
                            {
                                for (int j = 0; j < TiroManager.listaTiro.Count; j++)
                                {
                                    if (listaMeteoro[i].hitTestObject(TiroManager.listaTiro[j]))
                                    {

                                        houveColisao = true;
                                        
                                        listaMeteoro.RemoveAt(i);
                                        TiroManager.listaTiro.RemoveAt(j);

                                        Scoring.Update(gameTime);


                                    }

                                    //Scoring.marcarPonto = true;
                                }
                            }
                            
                        }

                        //if (listaMeteoro[i].hitTestObject(TiroManager.listaTiro[j]))
                        //{
                        //    Scoring.Update(gameTime);


                        //}
                        if (listaMeteoro[i].hitTestObject(personagem))
                        {
                            if (listaMeteoro[i] != null)
                            {
                                listaMeteoro.RemoveAt(i);
                                barraEnergia.vetorEscala.X -= 0.1f;
                                //haVida = false;
                            }
                            


                        }

                    }
                }


                

            }

           
            //if (houveColisao == true)
            //{
            //    //possivelColisao = false;
            //    Scoring.Update(gameTime);

            //}

            if (barraEnergia.vetorEscala.X < 0)
            {

                gameOver = true;

                if (gameOver == true)
                {

                    if (teclado.IsKeyDown(Keys.M))
                    {
                        SceneManager.setScene(new Menu());
                        Console.WriteLine("Voltar ao menu");
                    }

                }

            }
            
            

            houveColisao = possivelColisao;
            

            

            
            

            
        }

        public override void draw(SpriteBatch spriteBatch)
        {



            space.Draw(spriteBatch);
            personagem.Draw(spriteBatch);
            TiroManager.Draw(spriteBatch);

            if (listaMeteoro != null)
            {
                for (int i = 0; i < listaMeteoro.Count; i++)
                {
                    listaMeteoro[i].Draw(spriteBatch);
                }
            }


            if (barraEnergia.vetorEscala.X < 0)
            {

                if (gameOver == true)
                {

                    spriteBatch.DrawString(Menu.titulo, "Game Over", new Vector2(200.0f, 150.0f), Color.Red);

                    //spriteBatch.DrawString(caixaTXT, "Olá Mundo!", new Vector2(100.0f, 200.0f), Color.White);  

                    var output = "Clique M para voltar ao Menu";
                    Vector2 offset = Menu.caixaTXT.MeasureString(output) / 2;
                    spriteBatch.DrawString(Menu.caixaTXT, output, Menu.textPosition, Color.Yellow, 0, offset, 1.0f, SpriteEffects.None, 0.5f);

                }
            }

            Console.WriteLine("Vida" + ":" + barraEnergia.vetorEscala.X);
            
            
            //if (!gameOver)
            //{
                

            //}

            //if (barraEnergia.vetorEscala.X == 0.0f)
            //{

                



            //        spriteBatch.DrawString(Menu.titulo, "Game Over", new Vector2(200.0f, 150.0f), Color.Red);

            //        //spriteBatch.DrawString(caixaTXT, "Olá Mundo!", new Vector2(100.0f, 200.0f), Color.White);  

            //        var output = "Enter para voltar ao Menu";
            //        Vector2 offset = Menu.caixaTXT.MeasureString(output) / 2;
            //        spriteBatch.DrawString(Menu.caixaTXT, output, Menu.textPosition, Color.Yellow, 0, offset, 1.0f, SpriteEffects.None, 0.5f);

                

            //}
            
                      
            
            barraEnergia.Draw(spriteBatch);

            Scoring.Draw(spriteBatch);

            if (gameOver == true)
            {

                if (barraEnergia.vetorEscala.X == 0)
                {

                    spriteBatch.DrawString(Menu.titulo, "Game Over", new Vector2(200.0f, 150.0f), Color.Red);

                    //spriteBatch.DrawString(caixaTXT, "Olá Mundo!", new Vector2(100.0f, 200.0f), Color.White);  

                    var output = "Clique em M para voltar ao Menu";
                    Vector2 offset = Menu.caixaTXT.MeasureString(output) / 2;
                    spriteBatch.DrawString(Menu.caixaTXT, output, Menu.textPosition, Color.Yellow, 0, offset, 1.0f, SpriteEffects.None, 0.5f);

                }



            }
        }

        public override void terminate()
        {

            gameOver = true;

            Console.WriteLine("WINNER");
        }
        

    }
}
